#include "ToolBox/gl/ViewPoints/viewpoint3D.h"
#include <stdio.h>


ViewPoint3D::ViewPoint3D() : ViewPoint()
{
    angles = new Vectorf();
    positionPOW = new Vectorf();
    vecteurDirecteur = new Vectorf(0.0,0.0,-1.0);
}

ViewPoint3D::ViewPoint3D(Vectorf aValAngle)
{
    angles = new Vectorf(aValAngle);
    positionPOW = new Vectorf();
    vecteurDirecteur = new Vectorf(0.0,0.0,-1.0);
}

ViewPoint3D::ViewPoint3D(Vectorf  aValAngle, Vectorf position)
{
     angles = new Vectorf(aValAngle);
     positionPOW = new Vectorf(position);
     vecteurDirecteur = new Vectorf(0.0,0.0,-1.0);
}

void ViewPoint3D::SetVecteurDirecteur()
{
    vecteurDirecteur->x(-cos(angles->y()*3.14/180)*sin(angles->x()*3.14/180));
    vecteurDirecteur->y(sin(angles->y()*3.14/180));
    vecteurDirecteur->z(cos(angles->y()*3.14/180)*cos(angles->x()*3.14/180));

    *vecteurDirecteur=vecteurDirecteur->Normalize();
    *vecteurDirecteur=vecteurDirecteur->Inverse();
}


void ViewPoint3D::Use()
{
    glRotatef(angles->z(), 0, 0, 1);
    
    glRotatef(angles->y(),1, 0, 0);
    glRotatef(angles->x(),0, 1, 0);

    glTranslatef(-positionPOW->x(),-positionPOW->y(),-positionPOW->z());
}

void ViewPoint3D::Move(Vectorf aDeplacement)
{
    *positionPOW=*positionPOW+aDeplacement;
}

TrackBall::TrackBall() : ViewPoint3D()
{

}

void TrackBall::Use()
{
    glTranslatef(0,0,-rayon);
    glRotatef(angles->x(), 1, 0, 0) ;
    glRotatef(angles->y(), 0, 1, 0);
    glTranslatef(-positionPOW->x(),-positionPOW->y(),-positionPOW->z());

}
